package com.qire.manhua.dal.service;

import com.qire.antsbinder.dal.DataService;
import com.qire.antsbinder.dal.annotation.StrategyAnnotation;
import com.qire.antsrouter.lifecycleHandler.ActivityManageHandler;
import com.qire.common.basic.ObjectUtil;
import com.qire.common.constant.CustomEvent;
import com.qire.common.constant.Url;
import com.qire.common.dal.WarehouseFactory;
import com.qire.common.model.entity.UserEntity;
import com.qire.common.model.enumeration.LoginChannelType;
import com.qire.common.support.base.BaseActivity;
import com.qire.common.utils.NoticeEventBus;
import com.qire.common.utils.ScheduledTaskHelper;
import com.qire.common.utils.ToastHelper;
import com.qire.common.widget.snackbar.Prompt;
import com.qire.manhua.dal.IUserDataDAL;
import com.qire.manhua.dialog.NewcomerGuideRewardDialog;
import com.qire.manhua.model.vo.LoginRespVO;
import com.qire.manhua.model.vo.UserDetailVO;
import com.qire.other.thirdPlatform.QqPlatform;
import com.qire.other.thirdPlatform.WeChatPlatform;

import androidx.lifecycle.Lifecycle;

public class QuickLoginService extends DataService {

    private final IUserDataDAL userDataDAL = WarehouseFactory.create(this, IUserDataDAL.class);

    public void weChatLogin(final String activitySimpleName) {
        WeChatPlatform.WeChat.authorize((msg, info) -> {
            if(ObjectUtil.nonNull(info)) {
                // 微信的用户性别 1:男，2:女。奇热平台的 1:男 0:女。所以需要一个简单的转换
                int userSex = ObjectUtil.equals(info.sex, "1") ? 1 : 0;
                userDataDAL.requestWeChatLogin(info.openid, info.nickname, info.headimgurl, userSex, info.unionid, activitySimpleName);
                UserEntity.self.setLoginChannel(LoginChannelType.WeChat);
                UserEntity.self.save();
            }
        });
    }
    public void qqLogin(final String activitySimpleName) {
        QqPlatform.build().authorize((msg, info) -> {
            if(ObjectUtil.nonNull(info)) {
                // 微信的用户性别 1:男，2:女。奇热平台的 1:男 0:女。所以需要一个简单的转换
                int userSex = ObjectUtil.equals(info.sex, "1") ? 1 : 0;
                userDataDAL.requestQqLogin(info.openid, info.nickname, info.headimgurl, userSex, activitySimpleName);
                UserEntity.self.setLoginChannel(LoginChannelType.QQ);
                UserEntity.self.save();
            } else {
                ToastHelper.showToast(msg);
            }
        });
    }
    /**
     * 阿里一键快速登录
     * @param accessToken 阿里SDK获取的token
     */
    public void aliQuickMobileLogin(String accessToken) {
        userDataDAL.quickMobileLoginOnAli(accessToken);
    }
    @StrategyAnnotation(event = {Url.AliMobileLogin, Url.WeChatLogin, Url.QqLogin})
    public void quickMobileLoginOnAliApiCallback(LoginRespVO dataVO, boolean isCache) {

        if(ObjectUtil.isNull(dataVO)) {
            ToastHelper.showToast("登录失败");
        }

        // 登录
        UserEntity.self.login(dataVO.userid, dataVO.token);

        // 登录成功广播通知
        NoticeEventBus.NOTICE.sendEvent(CustomEvent.LOGIN_SUCCESS);

        // 提示登录成功顶部样式气泡
        ToastHelper.showSnackBar("登录成功", Prompt.SUCCESS);

//        // 检查有没有免费的vip待领取
//        requestHaveFreeVIP();

        // 登录完成刷新用户本地信息
        requestMyUserData();

        // 检查是否存在新人福利，及福利是否有效
        if(ObjectUtil.nonNull(dataVO.welfare) && dataVO.welfare.nua_num > 0) {
            // 获得登录页上一个页面，用于投放dialog，这里由于快速登录页并未记录在页面管理体系内，所以获取当前页就是上一个页面
            BaseActivity previousActivity = (BaseActivity) ActivityManageHandler.HANDLER.currentActivity();
            if (ObjectUtil.nonNull(previousActivity)) {
                // 制定一个计划任务，投放在登录页退出后的上一个页面，条件在生命周期 RESUMED 后执行， 计划任务为show dialog
                new ScheduledTaskHelper(previousActivity.getLifecycle())
                        .buildTask(dataVO) // 传递的数据 data
                        .setConditional(Lifecycle.State.RESUMED) // 条件
                        .setTask(data -> { // 任务内容
                            NewcomerGuideRewardDialog dialog = new NewcomerGuideRewardDialog(previousActivity);
                            if ("bean".equals(data.welfare.nua_type)) {
                                dialog.setBeanReward(data.welfare.nua_num + "金豆");
                            } else {
                                dialog.setVipReward(data.welfare.nua_num + "天会员");
                            }
                            dialog.show();
                            return true;
                        }).submitAndDoTask();//提交并执行，如果达成条件会立刻执行，如果未达到，则会在条件达到时执行
            }
        }
    }

    /**
     * 同步刷新用户详细数据
     */
    private void requestMyUserData() {
        userDataDAL.refreshUserDetailData();
        new TeensModeService().queryTeensModeState();
    }
    @StrategyAnnotation(event = Url.myIndex)
    public void refreshUserDetailDataCallback(UserDetailVO dataVO, boolean isCache) {
        if(ObjectUtil.nonNull(dataVO) && !isCache) {
            dataVO.updateUserEntity();
        }
    }

}
